//
//  SQLiteManager.swift
//  FMDB
//
//  Created by 雷路荣 on 16/1/3.
//  Copyright © 2016年 leilurong. All rights reserved.
//

/*
FMDB核心对象:
    1. FMDatabase: 一个FMDatabase相当于一个数据库,所有对数据库的操作都是靠它来执行
    1. executeUpdate: 执行更新,在FMDB中除了查询都成为更新
    2. FMDatabaseQueue: 他包含FMDatabase和queue.提供异步执行数据库
    1. inDatabase: 直接操作数据库,不带事务的
    2. inTransaction: 带事务的操作
    3. FMResultSet: 查询的结果集,通过这个对象来获取查询的信息
*/

import UIKit
// 在类的外面,任何地方都能使用
let T_Person = "T_Person"

class SQLiteManager: NSObject {
    
    ///单例
    static let sharedManager = SQLiteManager()
    ///数据库
    var dbQueue: FMDatabaseQueue
    
    private override init() {
    //获取沙盒路径
    let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
        print("documentPath = \(documentPath)")
    //拼接数据库文件路径
    let dbPath = (documentPath as NSString).stringByAppendingPathComponent("fmdb.db")
    //数据库完整路径
    dbQueue = FMDatabaseQueue(path: dbPath)
    //createTable("T_Person") 在init上面是不能调用对象方法的,还处于初始化属性.对象没有创建完成
        super.init()
        // init之后对象创建完成了.可以调用调用方法
        createTable(T_Person)
        
    }
    
    /**
    *  创建表  --- tName表名称
    */
    func createTable(tName: String) {
        //1 sql
        let sql = "CREATE TABLE IF NOT EXISTS \(tName) (\n " +
        "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +
        "name TEXT, \n " +
        "age INTEGER, \n " +
        "height REAL)"
        //执行
        dbQueue.inDatabase { (db) -> Void in
            // values: AnyObject...: 表示可变参数.参数的数量和类型都是变化的
            if db.executeUpdate(sql) {
                print("创建表成功")
            }else{
                print("创建表失败")
            }
        }
    }
}
